#include <iostream>

// 懒汉式：对象在调用是进行构建
// 饿汉式：程序开始时就构建

// 懒汉式 更灵活
// class Singleton
// {
// public:
//     static Singleton *getinstance()
//     {
//         if (instance == nullptr)
//         {
//             instance = new Singleton;
//         }
//         return instance;
//     }
//     static void relase()
//     {
//         delete instance;
//         instance = nullptr;
//     }

// private:
//     Singleton() {}
//     static Singleton *instance;
// };
// Singleton *Singleton::instance = nullptr;

// // 饿汉式
// class Singleton
// {
// public:
//     static Singleton *getinstance()
//     {
//         return instance;
//     }

// private:
//     Singleton() {}
//     static Singleton *instance;
// };
// Singleton *Singleton::instance = new Singleton;

class Singleton
{
public:
    static Singleton *getinstance()
    {
        static Singleton instance;
        return &instance;
    }

private:
    Singleton() {}
};

int main()
{
    auto obj = Singleton::getinstance();
    return 0;
}